/* use_md2.h
**
** Copyright (c) 2007, Meadhbh S. Hamrick
** All rights reserved.
** 
** Redistribution  and  use  in  source  and  binary  forms,  with  or  without
** modification, are permitted provided that the following conditions are met:
** 
**  * Redistributions of  source code must  retain the above  copyright notice,
**    this list of conditions and the following disclaimer.
** 
**  * Redistributions in binary form must reproduce the above copyright notice,
**    this list of conditions and the following disclaimer in the documentation
**    and/or other materials provided with the distribution.
** 
**  * Neither the  name of  Project Meadhbh  nor the names of  its contributors
**    may be used  to endorse  or promote  products derived from this  software
**    without specific prior written permission.
** 
** THIS SOFTWARE IS PROVIDED BY  THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
** AND ANY  EXPRESS OR IMPLIED WARRANTIES,  INCLUDING, BUT NOT  LIMITED TO, THE
** IMPLIED WARRANTIES  OF MERCHANTABILITY AND FITNESS FOR  A PARTICULAR PURPOSE
** ARE DISCLAIMED.  IN NO  EVENT SHALL THE  COPYRIGHT OWNER OR  CONTRIBUTORS BE
** LIABLE  FOR  ANY  DIRECT,   INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR
** CONSEQUENTIAL  DAMAGES  (INCLUDING,  BUT  NOT  LIMITED  TO,  PROCUREMENT  OF
** SUBSTITUTE GOODS  OR SERVICES;  LOSS OF USE,  DATA, OR PROFITS;  OR BUSINESS
** INTERRUPTION)  HOWEVER CAUSED  AND ON  ANY THEORY  OF LIABILITY,  WHETHER IN
** CONTRACT,  STRICT LIABILITY,  OR  TORT (INCLUDING  NEGLIGENCE OR  OTHERWISE)
** ARISING IN ANY WAY  OUT OF THE USE OF THIS SOFTWARE,  EVEN IF ADVISED OF THE
** POSSIBILITY OF SUCH DAMAGE.
** 
** $Id:$
*/

/* Macro Definitions */
#define APP_E_NOERR 0
#define APP_E_USAGE 1
#define APP_E_FILE  2

/* File Includes */
#include "config.h"
#include "mutil.h"
#include "mcrypto/md2.h"
#include "stdio.h"

static tMCMd2 c2[2] = {
  { .count = 12, .checksum = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},.data.asThree = { {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} } },
{ .count = 17, .checksum = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},.data.asThree = { {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4} } } };

int main( int argc, char *argv[] ) {
  int rv = APP_E_NOERR;
  FILE *fp = NULL;
  tMCMd2 context;
  int bytes_read;
  char buffer[256];
  char digest[16];

  mu_cp_fhexprint( stdout, (uint8_t *) & c2, sizeof( tMCMd2 )  * 2 );

  do {
    if( argc < 2 ) {
      rv = APP_E_USAGE;
      break;
    }

    if( NULL == ( fp = fopen( argv[1], "r" ) ) ) {
      rv = APP_E_FILE;
      break;
    }

    mc_mic_md2_initialize( &context );

    do {
      bytes_read = fread( buffer, 256, 1, fp );
      mc_mic_md2_update( &context, buffer, bytes_read );
    } while( !feof( fp ) );

    mc_mic_md2_digest( &context, digest );

    mu_cp_fhexprint( stdout, digest, 16 );

  } while( 0 );

  return( rv );
}
